#ifndef _EXPORTLIST_H
#define _EXPORTLIST_H

#define _section(x) __attribute__((used, section(x)))

#define module_init(_func, _name)                 \
    app_init_func_t _##_func _section("init") = { \
        _func,                                    \
        _name,                                    \
    }

#define module_run(_func) app_run_t _##_func _section("run") = _func;

typedef void (*app_run_t)(void);

typedef struct
{
    void (*app_func_init)(void);
    char *app_name;
} app_init_func_t;

extern unsigned long Image$$INIT$$Base;
extern unsigned long Image$$INIT$$Limit;
extern unsigned long Image$$RUN$$Base;
extern unsigned long Image$$RUN$$Limit;

void _init(void);
void _run(void);

#endif
